<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript" >

        // promise是一个构造函数,生成实例时要传递一个函数,函数接收两个参数,这两个参数的类型也是为函数
        // 可以通过调用resolve，将生成实例的状态更改为成功fulfilled,调用时传入的参数即是成功值
        // 可以通过调用reject，将生成实例的状态更改为失败rejected，调用时传入的参数即是失败值
        const p = new Promise((resolve,reject)=>{
            console.log(resolve);   // ƒ () { [native code] }
            console.log(reject);  // ƒ () { [native code] }

            // 状态只能更改一次
            reject(100)
            resolve(200)
            
        })

        // console.log(p); // Promise {<pending>}

        // 实例的原型中有then方法, 里面接收两个函数,第一个是成功的回调函数,第二个是失败的回调函数
        // then函数返回值是一个Promise实例, 状态和值看回调函数(成功或失败的回调)
        let p2 = p.then(
            response => {
                console.log(response);

                // 如果返回的是一个非Promise实例, 那么得到的状态为成功, 成功的值为返回值

           // 如果返回的是非promise，那么上一个.then返回的promise就是成功的,下一个.then成功的回调入列，成功的结果就是return的值
           // 如果返回的是promise，那么就要看promise是成功还是失败
                    // 回调函数返回的promise是成功的，那么.then返回的promise就是成功的，成功的结果就是return的promise成功的结果
                    // 回调函数返回的promise是失败的，那么.them返回的promise就是失败的，失败的原因就是return的promise失败的原因

                return response
            },
            error => {
                console.log(error);

                return error
            }
        )

        console.log(p2);


        

    </script>
</body>
</html>